package com.example.leetcode;

import java.util.HashSet;
import java.util.Set;

/**
 * 无重复最长子串长度
 * 例："abac"  长度3
 *
 * 集合双指针模型
 */
public class Demo0003 {
    public static void main(String[] args) {
        System.out.println(distinctLen("abac"));
    }

    public static int distinctLen(String str){
        //定义储存数过的字符的容器
        Set<Character> charSet=new HashSet<>();

        int len = str.length();
        int result=0,right=-1;
        for (int left = 0; left < len; left++) {

            //进入循环则代表左指针右移   需要从容器中移除左边一个字符
            if(left!=0){
                charSet.remove(str.charAt(left-1));
            }

            //内部循环则代表右指针右移动   并且容器中不包含该字符才能右移
            while (right+1<len && !charSet.contains(str.charAt(right+1))){
                charSet.add(str.charAt(right+1));
                ++right;
            }

            //记录最大值
            result=Math.max(result,right-left+1);
        }
        return result;
    }
}
